#!/usr/bin/env python
# -*- coding:utf-8 -*-

import matplotlib.pyplot as plt 
from random_walk import RandomWalk # 导入RandomWalk类,

"""
# 创建一个RandomWalk实例,并将其包含的点都绘制出来.
rw = RandomWalk() # 创建一个RandomWalk实例,存储到rw中.
rw.fill_walk() # 调用fill_walk()
plt.scatter(rw.x_values,rw.y_values,s=15) #将随机漫步包含x和y值传递给scatter(),并选择了合适的点尺寸.
plt.show()
"""



# 1.1 模拟多次随机漫步
"""
# 只要程序处于活动状态,就不断地模拟随机漫步
while True:
    # 创建一个RandomWalk实例,并将其包含的点都绘制出来
    rw = RandomWalk()
    rw.fill_walk()
    plt.scatter(rw.x_values,rw.y_values,s=15)
    plt.show()

    keep_running = input("Make another walk?(y/n): ")
    if keep_running == 'n':
        break
"""
"""
这些代码模拟一次随机漫步,在matplotlib查看器中显示结果. 
关闭查看器,程序将询问你是否要再模拟一次随机漫步。
输入y,就模拟多次随机漫步,这些随机漫步在起点附近进行,大多沿特定方向偏离起点,漫步点分布不均匀等,
要结束程序,请输入n.
"""     


# 1.2 设置随机漫步图的样式
# 给点着色
"""
while True:
    # 创建一个RandomWalk实例,并将其包含的点都绘制出来
    rw = RandomWalk()
    rw.fill_walk()

    # 使用了range()生成了一个数字列表,其中包含的数字个数与漫步包含的点数相同.
    point_numbers = list(range(rw.num_points))

    # 指定使用颜色映射Blues,并传递实参edgecolor=none,以删除每个点周围的轮廓.
    plt.scatter(rw.x_values,rw.y_values,c=point_numbers,cmap=plt.cm.Blues,edgecolors='none',s=15)
    plt.show()

    keep_running = input("Make another walk?(y/n):")
    if keep_running == 'n':
        break
"""


# 1.3 重新绘制起点和终点
"""
while True:
    rw = RandomWalk()
    rw.fill_walk()
    point_numbers = list(range(rw.num_points))
    plt.scatter(rw.x_values,rw.y_values,c=point_numbers,cmap=plt.cm.Blues,edgecolors='none',s=15)

    # 突出起点和终点
    plt.scatter(0,0,c='green',edgecolors='none',s=100)
    plt.scatter(rw.x_values[-1],rw.y_values[-1],c='red',edgecolors='none',s=100)
    plt.show()

    keep_running = input("Make another walk?(y/n):")
    if keep_running == 'n':
        break
"""
"""
为突出起点,使用绿色绘制点(0,0),并使其比其他点大(s=100),
为突出终点,在漫步包含的最后一个x和y值处绘制一个点,将其颜色设置为红色,并将尺寸设置为100.
"""



# 1.4 隐藏坐标轴
"""
while True:
    rw = RandomWalk()
    rw.fill_walk()
    point_numbers = list(range(rw.num_points))
    plt.scatter(rw.x_values[-1],rw.y_values[-1],c='red',edgecolors='none',s=100)

    # 隐藏坐标轴
    plt.axes().get_xaxis().set_visible(False)
    plt.axes().get_yaxis().set_visible(False)

    plt.show()

    keep_running = input("Make another walk?(y/n):")
    if keep_running == 'n':
        break
"""
"""
为修改坐标轴,使用了函数plt.axes(), 来将每条坐标轴的可见性都设置为False。
"""




# 1.5 增加点数
# 在创建RandomWalk实例时增大num_points的值,并在绘图时调整每个点的大小.
"""
while True:
    # 创建一个RandomWalk实例,并将其包含的点都绘制出来
    rw = RandomWalk(50000)
    rw.fill_walk()

    # 绘制点并将图形显示出来
    point_numbers = list(range(rw.num_points))
    plt.scatter(rw.x_values,rw.y_values,c=point_numbers,cmap=plt.cm.Blues,edgecolors='none',s=1)
    
    # 突出起点和终点
    plt.scatter(0,0,c='green',edgecolors='none',s=100)
    plt.scatter(rw.x_values[-1],rw.y_values[-1],c='red',edgecolors='none',s=100)
    plt.show()

    keep_running = input("Make another walk?(y/n):")
    if keep_running == 'n':
        break    
"""
"""
模拟了一次包含50000个点的随机漫步,并将每个点的大小都设置为1。
"""


# 1.6 调整尺寸以适合屏幕
while True:
    # 创建一个RandomWalk实例,并将其包含的点都绘制出来.
    rw = RandomWalk()
    rw.fill_walk()

    # 设置绘图窗口的尺寸
    plt.figure(figsize=(7,5))

    # 绘制点并将图形显示出来
    point_numbers = list(range(rw.num_points))
    plt.scatter(rw.x_values,rw.y_values,c=point_numbers,cmap=plt.cm.Blues,edgecolors='none',s=1)
    
    # 突出起点和终点
    plt.scatter(0,0,c='green',edgecolors='none',s=100)
    plt.scatter(rw.x_values[-1],rw.y_values[-1],c='red',edgecolors='none',s=100)
    plt.show()

    keep_running = input("Make another walk?(y/n):")
    if keep_running == 'n':
        break    
"""
函数figure()用于指定图表的宽度,高度,分辨率和背景色,给形参figsize指定一个元组,向matplotlib指出绘图窗口的尺寸,单位为英寸.
"""
